package com.atguigu.edu.realtime220815.util;

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @Classname KeywordUtils
 * @Description TODO
 * @Date 2023/2/16 11:22
 * @Created by lzx
 */
public class KeywordUtils {
    public static List<String> analyze(String text) {
        List<String> analyzeList = new ArrayList<>();
        //分词这一功能在网上有很多开源的程序可以实现,在这里我们使用的是IK分词器
        //1.使用IK分词器的核心就是IKSegmenter,这是一个可遍历的集合,需要传入两个参数
        //new IKSegmenter(Reader input , boolean useSmart) :
        //                Reader input : 第一个参数为字符输入流,是需要被分词的字符串 , 在这里我们可以创建StringReader,将需要分词的字符串传入
        //                boolean useSmart : 为true,使用智能分词策略 非智能分词：细粒度输出所有可能的切分结果 智能分词：合并数词和量词,对分词结果进行歧义判断
        StringReader stringReader = new StringReader(text);//因为StringReader类是Reader的子类,所以可以当做参数来传入IK分词器中
        IKSegmenter ikSegmenter = new IKSegmenter(stringReader,true);//开启智能分词

        //2.在IKSegmenter集合中,每一个元素都是一个Lexeme类对象,所以调用next()方法,判断下一个元素是否为空,如果
        //next()方法会抛出异常,我们这里直接捕获
        Lexeme lexeme = null;
        try {
            //如果不为空,则继续循环,读取下一个元素,如果为空就停止
            while((lexeme = ikSegmenter.next())!=null){
                //调用IK词元对象的getLexemeText,获取关键词
                String keyword = lexeme.getLexemeText();
                //将关键词添加到最终要输出的集合中
                analyzeList.add(keyword);
            }
        }catch (Exception e){
            System.out.println(e.getMessage());
        }

        return analyzeList;
    }
}
